package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * 使用有参构造器实例化对象
 */
public class ReflectDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //new Person("李四");
        Class cls = Class.forName("reflect.Person");
        /*
            反射对象:
            Class           :类对象，它的每一个实例用于表示一个类
            Package         :包对象，它的每一个实例用于表示一个包的信息
            Method          :方法对象，它的每一个实例用于表示一个方法
            Constructor     :构造器对象，它的每一个实例用于表示一个构造器

            Class提供的方法:
            Constructor getConstructor(Class... parameterTypes)
            该方法可以获取Class所表示的类的一个特定的构造器
         */
//        Constructor con = cls.getConstructor();//不传参时，获取的就是无参构造器,Person()
        //Person(String)
        Constructor con = cls.getConstructor(String.class);
        //new Person("李四");
        Object obj = con.newInstance("李四");
        System.out.println(obj);

        //Person(String,int)
        Constructor con1 = cls.getConstructor(String.class,int.class);
        Object obj1 = con1.newInstance("王五",30);
        System.out.println(obj1);
    }
}







